import numpy as np
import pandas as pd
from sqlalchemy import create_engine


def shujuqingxi():
    # 读取CSV文件中的数据
    data = pd.read_csv('苏宁易购酒数据.csv')
    print(data)

    # 删除价格为空的行
    data.dropna(subset=['价格'], inplace=True)
    # 删除白酒香型为空的行
    data.dropna(subset=['白酒香型'], inplace=True)

    # 替换酒精度中的空格为NaN，然后删除这些行
    data['酒精度'] = data['酒精度'].replace('  ', np.nan)
    data.dropna(subset=['酒精度'], inplace=True)

    # 统计每列的缺失值数量
    isnull_sum = data.isnull().sum()

    # 处理价格列，提取数值部分并转换为浮点数
    data['价格'] = data['价格'].apply(lambda x: str(x).split('¥')[1])
    data['价格'] = data['价格'].apply(lambda x: str(x).split('到手价')[0])
    data['价格'] = data['价格'].astype(float)
    print(data['价格'])

    # 处理品牌列，替换特定的品牌名称
    data['品牌'] = data['品牌'].replace('  ', '小品牌')
    data['品牌'] = data['品牌'].replace('贵州茅台酒', '贵州茅台')
    data['品牌'] = data['品牌'].replace('茅台', '茅台(MOUTAI)')
    print(data['品牌'])

    # 处理评价数列，提取数值部分并转换为整数
    data['评价数'] = data['评价数'].apply(lambda x: str(x).split('+')[0])
    data['评价数'] = data['评价数'].apply(
        lambda x: str(x).replace('万', '000') if '万' in str(x) and len(str(x).replace('万', '000')) > 1 else x)
    data['评价数'] = data['评价数'].apply(
        lambda x: str(x).replace('.', '') if '.' in str(x) and len(str(x).replace('.', '')) > 1 else x)
    data['评价数'] = data['评价数'].astype(int)
    print(data['评价数'])

    # 处理适用场景列，提取第二个场景
    data['适用场景'] = data['适用场景'].apply(
        lambda x: str(x).split(',')[1] if ',' in str(x) and len(str(x).split(',')) > 1 else x)
    data['适用场景'] = data['适用场景'].replace(' ', '都可以').replace('', '都可以')

    # 处理酒精度列，提取数值部分并转换为浮点数
    data['酒精度'] = data['酒精度'].apply(lambda x: str(x).split('度')[0])
    data['酒精度'] = data['酒精度'].astype(float)
    print(data['酒精度'])

    # 处理单支容量列，替换特定单位并转换为浮点数
    data['单支容量'] = data['单支容量'].replace('  ', np.nan)
    data.dropna(subset=['单支容量'], inplace=True)
    data['单支容量'] = data['单支容量'].apply(haoshen)
    data['单支容量'] = data['单支容量'].apply(lambda x: str(x).replace('kg', '000'))
    data['单支容量'] = data['单支容量'].apply(lambda x: str(x).replace('KG', '000'))
    data['单支容量'] = data['单支容量'].apply(lambda x: str(x).split('-')[1] if len(str(x).split('-')) > 1 else x)
    data['单支容量'] = data['单支容量'].apply(lambda x: str(x).split(',')[0] if len(str(x).split(',')) > 1 else x)
    data['单支容量'] = data['单支容量'].replace('L', '000')
    data['单支容量'] = data['单支容量'].astype(float)
    data['单支容量'] = data['单支容量'].apply(jisuan)
    print(data['单支容量'])

    # 处理白酒香型列，替换空格为未知
    data['白酒香型'] = data['白酒香型'].replace('  ', '未知')
    print(data['白酒香型'])

    return data


def jisuan(s):
    # 如果单支容量小于50，假设它是毫升，转换为升
    if s < 50:
        s = s * 1000
        return s
    else:
        return s


def haoshen(s):
    # 尝试所有分隔符，提取数值部分
    for delimiter in ['毫升', 'ml', 'mL', 'ML', 'Ml', 'nL', 'CL', 'l', 'L', '克']:
        parts = s.split(delimiter)
        if len(parts) > 1:
            return parts[0]
    return s


def shujuku(data):
    # 数据库连接信息
    username = 'root'
    password = '123456'
    host = 'localhost'
    port = '3306'
    database = 'jiudeshuju'

    # 创建连接引擎
    data = data.rename(columns={'Unnamed: 0': 'id'})
    engine = create_engine(f'mysql+pymysql://{username}:{password}@{host}:{port}/{database}')

    # 删除不必要的列
    data = data.drop(columns=['id'])

    # 将数据写入数据库
    data.to_sql('qingxideshuju', con=engine, index=False, if_exists='append')
    print("数据已成功写入数据库")


if __name__ == '__main__':
    # 清洗数据
    data = shujuqingxi()
    # 将清洗后的数据写入数据库
    shujuku(data)